import java.util.Arrays;
import java.util.Scanner;

// 滑动窗口的题
public class D {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int k = sc.nextInt();
		ty2[] a = new ty2[n + 10];
		
		for(int i = 1; i <= n; i ++ ) {
			a[i] = new ty2();
			a[i].pos = i;
			a[i].val = sc.nextInt();
		}
		Arrays.sort(a, 1, n + 1);
		
//		for(int i = 1; i <= n; i ++ ) {
//			System.out.print(a[i].pos + " ");
//		}
//		System.out.print("\n");
		int ret = (int) (2e5 + 10);
		int hh = 1;
		int tt = 0;
		int[] q = new int[n + 10];
		
		int[] ma = new int[n + 10];
		int[] mi = new int[n + 10];
		int cnt1 = 0;
		int cnt2 = 0;
		// 求的是最小的元素的下标
		// 去模拟栈
		//这个是求的是最小的
		for(int i = 1; i <= n; i ++ ) {
			if(hh <= tt && q[hh] < i - k + 1)hh += 1; // 前提保证队列不为空 栈底的元素也要往上走 因为
			while(hh <= tt && a[q[hh]].pos >= a[i].pos)tt -= 1; // 出去
			q[++ tt ] = i; // 存的是下标
			if(i >= k ) {
				mi[++ cnt1] = a[q[hh]].pos;
			}
		}
		// 这个是求最大的
		hh = 1;
		tt = 0;
		for(int i = 1; i <= n; i ++ ) {
			if(hh <= tt && q[hh] < i - k + 1)hh += 1;
			while(hh <= tt && a[q[hh]].pos <= a[i].pos)tt -= 1; // 出去的前提是 不为空 还有
			q[++ tt ] = i;
			if(i >= k) {
				ma[++ cnt2] = a[q[hh]].pos;
			}
		}
		for(int i = 1; i <= cnt1; i ++ ) {
			//System.out.print("最大的下标: " + ma[i] + " 最小的下标: " + mi[i] + "\n");
			ret = Math.min(ret, ma[i] - mi[i]);
		}
		//System.out.print("\n");
		System.out.print(ret);
		
	}
}

class ty2 implements Comparable<ty2>{
	int val;
	int pos;
	@Override
	public int compareTo(ty2 o) {
		return this.val - o.val;
	}
}